package com.yunke.common.log;

import java.lang.annotation.*;

/**
 * 业务日志注解
 * 用于标记需要记录业务操作日志的方法
 * 
 * @author yunke
 * @since 1.0.0
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BusinessLog {

    /**
     * 操作描述 (默认值方法)
     */
    String value() default "";

    /**
     * 业务模块
     */
    String module() default "";

    /**
     * 操作描述
     */
    String operation() default "";

    /**
     * 操作参数描述
     */
    String params() default "";

    /**
     * 操作类型
     */
    OperationType type() default OperationType.OTHER;

    /**
     * 是否记录参数
     */
    boolean logParams() default true;

    /**
     * 是否记录返回值
     */
    boolean logResult() default true;

    /**
     * 操作类型枚举
     */
    enum OperationType {
        /**
         * 查询
         */
        SELECT("查询"),
        
        /**
         * 新增
         */
        INSERT("新增"),
        
        /**
         * 修改
         */
        UPDATE("修改"),
        
        /**
         * 删除
         */
        DELETE("删除"),
        
        /**
         * 登录
         */
        LOGIN("登录"),
        
        /**
         * 退出
         */
        LOGOUT("退出"),
        
        /**
         * 导入
         */
        IMPORT("导入"),
        
        /**
         * 导出
         */
        EXPORT("导出"),
        
        /**
         * 其他
         */
        OTHER("其他");

        private final String description;

        OperationType(String description) {
            this.description = description;
        }

        public String getDescription() {
            return description;
        }
    }
} 